mysqlhotcopy是一个Perl脚本,它使用LOCK TABLES、FLUSH TABLES、cp或scp来快速备份数(🥋)据库(🆗)。它是备份数据库或单个表的最快途径,其(🛂)缺点是mysqlhotcopy只用于备份MyISAM,而且它需要运行在Liunx/UNIX环境中。
需要注意的是(♓),mysqlhotcopy是Perl脚本,因此需要安装Perl的MySQL数据库接口包,我们可以从Linux的官方FTP(http://ftp.redhat.com)上下载它,以笔者的测试(🙌)环境(Linux AS4,INTEL32位处理器)为例,从目录/pub/redhat/linux/enterprise/4/en/os/i386/SRPMS中下载包perl-DBD-MySQL-2.9004-3.1.src.rpm。而此包的安装又依赖于MySQL的开发包,因此还需要下载MySQL相应版本的开发包,笔者测试环(💸)境中下载(💍)的包名为:MySQL-devel-community-5.0.41-0.rhel4.i386.rpm。后者的安装过程和普通rpm一(⚓)样,这里不在赘述,而前者从FTP站点下载的是源码包,需要重新编译后才可以安装。编译的过程简单描述如下。
(1)在操作系统上su到root用户。
(2)执行如下命令,生成.spec文件。
[root@localhost ~]# rpm -i perl-DBD-MySQL-2.9004-3.1.src.rpm warning: perl-DBD-MySQL-2.9004-3.1.src.rpm: V3 DSA signature: NOKEY, key ID db42a60e
(3)此时进入(🔺) cd /usr/src/redhat/SPECS,可以看(🍹)到 perl-DBD-MySQL.spec
[root@localhost ~]# cd /usr/src/redhat/SPECS[root@localhost SPECS]# ls -l total 32 -rw-rw-r-- 1 root root 3703 Nov 27 2004 perl-DBD-MySQL.spec-rw-rw-r-- 1 root root 4369 Jun 15 2004 perl-DBI.spec -rw-rw-r-- 1 root root 7683 May 28 2003 telnet.spec
(4)(👜)执行如下命令,将 spec 文件编译为 RPM 安装文件。
[root@localhost SPECS]# rpmbuild -bb perl-DBD-MySQL.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.905 ......省略中间日志 + cd /usr/src/redhat/BUILD + cd DBD-mysql-2.9004 + rm -rf /var/tmp/perl-DBD-MySQL-2.9004-root + exit 0
(5)进入 RPM 最后放置目录,一般为/usr/src/redhat/RPMS/i386。
[root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386 [root@localhost i386]# ls -ltr total 2068 -rw-r--r-- 1 root root 29385 Mar 17 2006 telnet-server-0.17-26.i386.rpm -rw-r--r-- 1 root root 171509 Mar 17 2006 telnet-debuginfo-0.17-26.i386.rpm -rw-r--r-- 1 root root 46858 Mar 17 2006 telnet-0.17-26.i386.rpm -rw-r--r-- 1 root root 974749 Dec 29 15:42 perl-DBD-MySQL-2.9004-3.1.i386.rpm -rw-r--r-- 1 root root 855503 Dec 29 15:42 perl-DBD-MySQL-debuginfo-2.9004-3.1.i386.rpm
(6)安装生成的 rpm 包
rpm ivh perl-DBD-MySQL-2.9004-3.1.i386.rpm
至此,源码包(🧀)安装完毕。
mysqlhotcopy 的用(🖼)法如下:
shell> mysqlhotcopy db_name [/path/to/new_directory] shell> mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
下面的例子中将 mysql 数据库备(📿)份到到当前目(❇)录(🍽)下的 backup 下:
[root@localhost mysql]# mysqlhotcopy -u root mysql ./backup/ Existing hotcopy directory renamed to './backup//mysql_old' Locked 18 tables in 0 seconds. Flushed tables (`mysql`.`columns_priv`, `mysql`.`db`, `mysql`.`func`, `mysql`.`help_category`, `mysql`.`help_keyword`, `mysql`.`help_relation`, `mysql`.`help_topic`, `mysql`.`host`, `mysql`.`proc`, `mysql`.`procs_priv`, `mysql`.`t1`, `mysql`.`tables_priv`, `mysql`.`time_zone`, `mysql`.`time_zone_leap_second`, `mysql`.`time_zone_name`, `mysql`.`time_zone_transition`, `mysql`.`time_zone_transition_type`, `mysql`.`user`) in 0 seconds. Copying 54 files... Copying indices for 0 files... Unlocked tables. mysqlhotcopy copied 18 tables (54 files) in 0 seconds (0 seconds overall).
mysqlhotcopy 的常用选项如下。
--allowold:如果(📌)备份路径下中含有同名备份(🥠),则将旧的备份目录 rename 为目录名 _old。--addtodest:如果备份路(🤯)径(🚰)下存在同名目录,则仅(🦔)仅将新的文件加入目录(🃏)。--noindices:不备份所有的索引文件。--flushlog:表被锁定后刷新日志。这些选项的含义都很简单,读者可(💐)以下去自己测试(🤱),这里就不再举例。更多的选项,可以用mysqlhotcopy –help 命令或者 perldoc /usr/bin/mysqlhotcopy 命令进行查询。
搜索微信公众号:TestingStudio霍格沃兹的干货都很硬核